package gm.commands;

import java.io.PrintWriter;
import java.util.HashMap;

/**
 * Modul.
 *
 * @author imruf84
 */
public class CommandModule extends HashMap<String, Command> {

    /**
     * Parancs hozzáadása.
     *
     * @param c parancs
     */
    public void addCommand(final Command c) {
        put(c.getName(), c);
    }

    /**
     * Parancsok hozzáadása.
     *
     * @param cs parancsok
     */
    public void addCommandSet(final CommandSet cs) {
        cs.values().stream().forEach((c) -> {
            addCommand(c);
        });
    }

    /**
     * Parancs végrehajtása.
     *
     * @param command parancs szövege
     * @param out kimenet
     * @return parancs végeredményének a szövege
     */
    public String execute(String command, final PrintWriter out) {

        // Parancs nevének a kinyerése.
        String name = command.trim().split(" ")[0];

        // Ha nincs ilyen nevű parancs, akkor hibával leállunk.
        if (!containsKey(name)) {
            return "Command not found:" + name;
        }

        return get(name).execute(command, out);
    }
}
